package com.gitee.sop.sopauth.entity;

import lombok.Data;
import lombok.experimental.Accessors;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
import java.util.UUID;

/**
 * @author: admin
 * @date: 2019-12-23
 * @version: 1.0.0
 */
@Data
@Accessors(chain = true)
public class Resource implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    /**
     * uuid uuid标识
     */
    private String uuid;

    /**
     * 文件名
     */
    private String fileName;

    /**
     * 类型
     */
    private String type;

    /**
     * 子类型
     */
    private String subtype;

    /**
     * 大小 单位：字节
     */
    private Long size;

    /**
     * 文件整体md5 用于判断内容完全相同的资源，不在重复上传，而引用之前的内容即可，避免资源浪费
     */
    private String fileMd5;

    /**
     * 资源引用计数 资源被引用的次数，用于标记资源的生命状态，当引用次数为0时，标识资源无引用，此时应该删除资源，防止资源浪费
     */
    private Integer referenceCount;

    /**
     * 上传资源的客户端的应用id
     */
    private String appId;
    /**
     * 资源使用计数，即下载计数
     */
    private Integer usedCount;
    /**
     * 最后使用时间，即最后下载时间
     */
    private Date lastUsedTime;
    /**
     * 第一次创建时间
     */
    private Date createdTime;

    /**
     * 下载链接
     */
    private String downloadUrl;

    public void init() {
        Date now = new Date();
        uuid = UUID.randomUUID().toString().replace("-", "");
        referenceCount = 1;
        usedCount = 1;
        lastUsedTime = now;
        createdTime = now;
    }
}
